// https://leetcode.cn/problems/longest-consecutive-sequence/description/?envType=study-plan-v2&envId=top-100-liked
// 128. 最长连续序列
// 中等
// 相关标签
// 相关企业
// 给定一个未排序的整数数组 nums ，找出数字连续的最长序列（不要求序列元素在原数组中连续）的长度。
//
// 请你设计并实现时间复杂度为 O(n) 的算法解决此问题。

/**
 * @param {number[]} nums
 * @return {number}
 */
var longestConsecutive = function (nums) {
  const set = new Set(nums)

  let res = 0
  for (const number of set) {
    // 如果 number 不是连续子序列的第一个则跳过
    if (set.has(number - 1)) {
      continue
    }

    // 这段循环用于遍历子序列，计算子序列的长度
    let longestCnt = 1
    let curNumber = number
    while (set.has(++curNumber)) {
      longestCnt++
    }

    // 更新答案
    res = Math.max(res, longestCnt)
  }

  return res
}

console.log(longestConsecutive([100, 4, 200, 1, 3, 2]))
// 答案 4  相当于 [1, 2, 3, 4] 的长度
